<?php
    abstract class Control {
        protected static $_callable = array();
        protected static $_data     = array();
        protected static $_noLogin  = array();
        
        public static function get($name) {
            if (!array_key_exists($name,static::$_data)) {
                throw new Exception("Invalid key $name");
            }
            return static::$_data[$name];
        }
        
        public static function set($name,$value) {
            if (!array_key_exists($name,static::$_data)) {
                throw new Exception("Invalid key $name");
            }
            static::$_data[$name] = $value;
        }
        
        /**
         * Funktion avulla Control luokasta periytyvä luokka voi kertoa
         * onko funktiokutsu ylipäätään API:n kautta kutsuttavissa.
         *
         * @param    string  $function   Funktion nimi
         * @return   bool
         */
        public static function isCallable($function) {
            $result = false;
            
            if (in_array($function,static::$_callable)) {
                $result = true;
            }
            
            return $result;
        }
        
        /**
         * Funktion avulla Control luokasta periytyvä luokka voi kertoa
         * voiko funktiota kutsua ilman kirjautumista.
         *
         * @param    string  $function   Funktion nimi
         * @return   bool
         */
        public static function loginRequired($function) {
            $result = true;
            
            if (in_array($function,static::$_noLogin)) {
                $result = false;
            }
            
            return $result;
        }
    }